package cn.mengfly.testnrz.im.codec;

import cn.mengfly.testnrz.im.ProtoMsg;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
import lombok.extern.slf4j.Slf4j;

/**
 * 自定义的Proto数据编码器
 *
 * @author Mengfly
 */
public class ProtobufEncoder extends MessageToByteEncoder<ProtoMsg.Message> {
    @Override
    protected void encode(ChannelHandlerContext ctx, ProtoMsg.Message msg, ByteBuf out) throws Exception {
        byte[] bytes = msg.toByteArray();
        int length = bytes.length;

        // 将消息长度写入
        // 这里调用了writeShort方法，也就意味着最多只能传输32767个字节
        // 如果想要传输更多的字节，可以滴哦用writeInt方法
        out.writeShort(length);
        //TODO 写入魔数，版本号等信息...
        // ....
        out.writeBytes(msg.toByteArray());
    }
}
